#include "ros/ros.h"
#include "std_msgs/String.h"
#include "geometry_msgs/Twist.h"
#include "ros_demo/CustomMessage.h"

// 回调函数：处理字符串消息
void chatterCallback(const std_msgs::String::ConstPtr& msg)
{
    ROS_INFO("收到消息: %s", msg->data.c_str());
}

// 回调函数：处理速度控制消息
void cmdVelCallback(const geometry_msgs::Twist::ConstPtr& msg)
{
    ROS_INFO("收到速度命令 - 线速度: %.2f, 角速度: %.2f", 
             msg->linear.x, msg->angular.z);
}

// 回调函数：处理自定义消息
void customCallback(const ros_demo::CustomMessage::ConstPtr& msg)
{
    ROS_INFO("收到自定义消息 - 名称: %s, ID: %d, 值: %.2f, 位置: (%.2f, %.2f, %.2f)",
             msg->name.c_str(), msg->id, msg->value,
             msg->position.x, msg->position.y, msg->position.z);
}

int main(int argc, char **argv)
{
    // 初始化ROS节点
    ros::init(argc, argv, "listener");
    
    // 创建节点句柄
    ros::NodeHandle n;
    
    // 创建订阅者
    ros::Subscriber chatter_sub = n.subscribe("chatter", 1000, chatterCallback);
    ros::Subscriber cmd_vel_sub = n.subscribe("cmd_vel", 1000, cmdVelCallback);
    ros::Subscriber custom_sub = n.subscribe("custom_topic", 1000, customCallback);
    
    ROS_INFO("Listener节点启动，开始监听消息...");
    
    // 进入循环，等待回调函数
    ros::spin();
    
    return 0;
}
